#include "melhorEscolha.h"

bool menor_distancia(int um, int dois)
{
	float mDistancias[8];
	mDistancias[0] = 20.0;
	mDistancias[1] = 10.4;
	mDistancias[2] = 8.9;
	mDistancias[3] = 6.7;
	mDistancias[4] = 6.9;
	mDistancias[5] = 4.0;
	mDistancias[6] = 3.0;
	mDistancias[7] = 0.0;

	return ( mDistancias[um] < mDistancias[dois] )? true: false;
}

MelhorEscolha::MelhorEscolha()
{
}

MelhorEscolha::~MelhorEscolha()
{
}

MelhorEscolha::MelhorEscolha(int inicio, int fim)
{
	this->mInicio = inicio;
	this->mFim = fim;
	this->mGrafo = new MatrizAdjacencia();
	this->mGrafo->constroi();
}

void MelhorEscolha::retornaCaminho()
{
	std::cout << "MelhorEscolha Caminho: ";
	this->mFila.push_front(this->mInicio);

	while(!mFila.empty() && this->mFila.front() != this->mFim)
	{
		int* filhos = this->mGrafo->getFilhos(this->mFila.front());
		std::cout << this->mFila.front() << " -> ";
		this->mFila.pop_front();

		for(int i = 0; i < this->mGrafo->getNumVertices(); i++)
		{
			if(filhos[i] > 0)
			{
				this->mFila.push_front(i);
			}
		}
		this->mFila.sort(menor_distancia);
	}
	std::cout << this->mFim << std::endl;
}
